home *** CD-ROM | disk | FTP | other *** search
File List | 1986-10-19 | 3.9 KB | 138 lines |
- ' ****************
- ' *** MATH.LST ***
- ' ****************
- '
- DEFWRD "a-z"
- '
- > PROCEDURE factorial(number,VAR fac#)
- ' *** return factorial of number
- ' *** global : OVERFLOW!
- LOCAL m$,n,k
- IF number>449
- PRINT CHR$(7);
- m$="overflow ...| |maximum 449!|("+STR$(number)+"! not possible)"
- ALERT 3,m$,1," OK ",k
- overflow!=TRUE
- fac#=0
- ELSE
- fac#=1
- overflow!=FALSE
- FOR n=1 TO number
- MUL fac#,n
- NEXT n
- ENDIF
- RETURN
- ' **********
- '
- > PROCEDURE binomial.chance(number,chance#,n,VAR n.chance#)
- ' *** two outcomes are possible (U1 en U2, e.g. heads and tails)
- ' *** outcomes are tested a number of times (e.g. 100 coin tosses)
- ' *** chance for outcome U1 is chance# (0-1; e.g. 0.5 for heads)
- ' *** return chance for n U1-outcomes (e.g. 60 times heads)
- ' *** uses Procedure Factorial
- LOCAL comb#,n1#,n2#,n3#
- @factorial(number,n1#)
- @factorial(n,n2#)
- @factorial(number-n,n3#)
- comb#=(n1#/n2#)/n3#
- n.chance#=comb#*((chance#)^n)*((1-chance#)^(number-n))
- RETURN
- ' **********
- '
- > PROCEDURE correlate(number,VAR proc1#(),proc2#(),cor#,sign!,a#,b#)
- ' *** return correlation between numbers in arrays proc1#() and proc2#()
- ' *** use elements with index 1 to number
- ' *** also returns flag for significance of correlation and regression-line
- '
- LOCAL n,sum_xy#,sum_x#,sum_y#,sum_x2#,sum_y2#,numerator#,denominator#
- CLR sum_xy#,sum_x#,sum_y#,sum_x2#,sum_y2#
- '
- IF NOT DIM?(cor_a#())
- DIM cor_a#(32),cor_r#(32)
- RESTORE cor_r_values
- FOR n=1 TO 32
- READ cor_a#(n),cor_r#(n)
- NEXT n
- ENDIF
- '
- FOR n=1 TO number
- sum_xy#=sum_xy#+proc1#(n)*proc2#(n)
- sum_x#=sum_x#+proc1#(n)
- sum_y#=sum_y#+proc2#(n)
- sum_x2#=sum_x2#+proc1#(n)*proc1#(n)
- sum_y2#=sum_y2#+proc2#(n)*proc2#(n)
- NEXT n
- numerator#=sum_xy#-(sum_x#*sum_y#)/number
- denominator#=SQR((sum_x2#-(sum_x#*sum_x#)/number)*(sum_y2#-(sum_y#*sum_y#)/number))
- cor#=numerator#/denominator#
- '
- FOR n=1 TO 32
- EXIT IF number<=cor_a#(n)
- NEXT n
- IF ABS(correlatie#)<cor_r#(n)
- sign!=FALSE ! correlation not significant (90 %)
- ELSE
- sign!=TRUE ! significant correlation (90 %)
- ENDIF
- '
- denominator#=sum_x2#-(sum_x#*sum_x#)/number
- a#=numerator#/denominator# ! regression-line : y = ax + b
- b#=sum_y#/number-a#*(sum_x#/number)
- '
- cor_r_values:
- DATA 3,.988,4,.9,5,.805,6,.729,7,.669,8,.622,9,.582,10,.55,11,.524,12,.497
- DATA 13,.476,14,.458,15,.441,16,.426,17,.421,18,.4,19,.389,20,.378,21,.369
- DATA 22,.36,24,.344,26,.33,28,.317,30,.306,35,.275,40,.264,50,.235,60,.214
- DATA 70,.195,80,.185,90,.173,100,.165,0
- RETURN
- ' **********
- '
- > PROCEDURE ggd(x%,y%,VAR ggd%)
- ' ** bepaal grootste gemene deler van twee getallen (algoritme van Euclides)
- LOCAL x2%,y2%,rest%
- x2%=x%
- y2%=y%
- REPEAT
- rest%=MOD(x2%,y2%)
- x2%=y2%
- y2%=rest%
- UNTIL rest%=0
- ggd%=x2%
- RETURN
- ' **********
- '
- > PROCEDURE piechart(VAR n())
- ' *** positive numbers in word-array are represented as percentage in piechart
- ' *** High resolution only
- ' *** uses Standard Globals
- LOCAL n.max,i,sum,p.end#,p.start#,ps#,pu#,psa#
- CLR sum,psa#,p.start#
- n.max=DIM?(n())-1
- FOR i=1 TO n.max
- ADD sum,n(i)
- NEXT i
- ERASE n.fract#()
- DIM n.fract#(n.max)
- FOR i=1 TO n.max
- n.fract#(i)=n(i)/sum*2*PI ! 2*PI = 100 %
- NEXT i
- FOR i=1 TO n.max
- p.end#=p.start#+n.fract#(i)*57.3
- DEFFILL 1,2,i ! new Fill-pattern (max. 24)
- PELLIPSE 320,180,300,150,10*p.start#+2700,10*p.end#+2700
- p.start#=p.end#
- NEXT i
- DEFTEXT ,,,13
- FOR i=1 TO n.max
- ps#=psa#+n.fract#(i)
- pu#=0.5*(ps#+psa#)
- x#=70*SIN(pu#)+54
- y#=25*COS(pu#)+34
- ' PRINT AT(x#/2+14,y#/3+1);n(i)
- TEXT (x#/2+12.5)*char.width,(y#/3)*char.height+4,STR$(n(i))
- psa#=ps#
- NEXT i
- RETURN
- ' **********
- '
-